本文为看雪论坛文章
之前课程已经给出的Socket的自吐,还差一个服务器IP地址和端口的自吐,补充上。
编写测试demo后,首先利用objection去批量hook住内存中socket所有类,然后模拟触发socket创建,从被触发的socket类的方法中找到与IP地址和端口相关的方法。接着单独hook住与ip地址和端口相关的方法,再次模拟触发socket创建,观察hook结果符合预期。最终编写frida脚本自动化拿到服务器的ip和端口,并利用植物大战僵尸apk测试,符合预期。本题知识点更多的是一种通用解题思路,这种利用ojection批量hook住相关类的方法不局限于获取服务器的ip地址和端口。
(1) 第一步,编写一个客户端的demo。Mainactivity核心代码如下,创建两个按键,一个基于MessageTransmit类创建socket,一个用来发包。MessageTransmit类核心代码如下,测试服务端ip为“192.168.31.46”,测试端口是6666。(2) 第二步,利用objection进行分析。分析的第一步骤,利用objection执行如下命令查看内存中有哪些socket类。然后将这些类拷贝到excel中,生成“android hooking watch class java.net.AbstractPlainSocketImpl”这样的列表,再拷贝到hook.txt中,采用如下命令启动apk时,一次性全部hook住socket相关类中所有方法。在app上按键触发socket创建流程,可以看到如下调用关系,其中光亮函数看上去就是拿到服务端地址和端口的关键。于是我们重新objection这个apk,然后采用如下两条命令,hook住getPort和getAddress方法,再次点击创建socket按键,可以看到打印出了服务端ip和地址,与我们demo中填写的一致。(3) 第三步,编写frdia脚本,并进行测试。如下是frida脚本,根据log可以看到打印出了服务端的ip和port。最后我还用这个frida脚本,跑了下植物大战僵尸apk,测试结果如下,也确实能自吐出服务端的ip和port。
看雪ID:PTRer
https://bbs.pediy.com/user-home-874618.htm
*本文由看雪论坛 PTRer 原创,转载请注明来自看雪社区。
《安卓高级研修班》2021年6月班火热招生中!